//定制请求的实例
import { ElMessage } from 'element-plus'
//导入axios  npm install axios
import axios, { AxiosError } from 'axios';
import { type AxiosResponse } from 'axios'
import { useTokenStore } from '@/stores/token';
//定义一个变量,记录公共的前缀,  baseURL
const baseURL = '/api';
const instance = axios.create({ baseURL })

export interface Data<T> {
  code: number
  msg: string
  data: T
}

//添加请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 添加token
    const tokenStore = useTokenStore()
    const token = tokenStore.token
    if (tokenStore.token) {
      config.headers.Authorization = token
    }
    return config
  },
  (err) => {
    Promise.reject(err)
  }
)

import router from '@/router'

//添加响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    // console.log(response.data);
    // 处理成功的响应  
    if (response.data.code !== 0) {
      // 非成功响应码，显示错误消息
      const errorMessage = response.data.msg || '服务异常';
      ElMessage.error(errorMessage);
      throw new Error(errorMessage);
    }
    // 成功响应，直接返回响应数据
    return response

  },
  (error: AxiosError) => {
    // 处理请求错误
    // 判断是否登录，未登录跳转到登录页面
    if (error.response && error.response.status === 401) {
      ElMessage.error('当前未登录,请先登录');
      router.push('/login');
      return Promise.reject(new Error('未登录'));
    } else if (error.response) {
      // 其他 HTTP 错误  
      ElMessage.error('服务异常');
      return Promise.reject(error.response);
    } else {
      // 网络错误  
      ElMessage.error('网络异常');
      return Promise.reject(error);
    }
  }
)

export default instance;